KVC可以存取純量(scalar,我的感覺就是基礎型別,如:(int, bool)以及結構(struct)。
如同KVC存取物件一樣實現setter(-set<Key>:
) & getter(-<key>
) 方法。
但是透過KVC去存取的話,必需進行打包和解包的動作。
純量 VS
NSNumber,結構 VS
NSValue。
例如:
透過KVC存值給int型別必須透過NSNumber去存取
[self setValue:@100 forKey:@"x"]
透過KVC去取int型別的值也是回傳NSNumber
NSNumber *number = [self valueForKey:@"x"]
在我們想要透過KVC存取純量及結構的同時,我們也必須實現setNilValueForKey:
方法,因為我們有可能透過KVC setter存入一個nil進去。
1 | @interface MyClass |
1 | typedef struct { |
詭異點(小細節??)
這篇有提到說請確保與KVC相容 Ensuring KVC Compliance
- Implement a method named
-<key>
,-is<Key>
- or have an instance variable
<key>
or_<key>
- If the property is mutable, then it should also implement
-set<Key>:
getter依序註解getFf
,ff
,isFf
。
setter依序註解setFf:
。
1 | @interface MyClass |
相關文章:
IOS Dev Lib
Struct to NSValue
bou.io(介紹KVC很詳細的個人Blog)
- 很完善KVC教學,以及自訂KVC的Custom Collections OperatorsKey-Value Coding: Custom Operators
- KVC Open Source 使用
x.kvc[]
An alternative syntax for KVC - Several Approaches to Higher-Order Functions with Objective-C Collections
- Filtering NSArray With Key-Value Coding
相當深的一篇,(實作KVC)
基本KVC教學